namespace CSharpPro._1016;

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class User
{
    // 静态列表存储所有注册用户
    private static List<User> registeredUsers = new List<User>();
    
    public string Username { get; set; }
    public string Password { get; set; }
    
    // 显示主菜单
    public static void ShowMainMenu()
    {
        Console.WriteLine("\n===== 主菜单 =====");
        Console.WriteLine("1. 登录");
        Console.WriteLine("2. 注册");
        Console.WriteLine("3. 退出");
        Console.Write("请选择功能（1-3）：");
    }
    
    // 用户注册功能
    public static void Register()
    {
        Console.WriteLine("\n===== 用户注册 =====");
        
        // 获取并验证用户名
        string username;
        while (true)
        {
            Console.Write("请输入用户名：");
            username = Console.ReadLine()?.Trim();
            
            if (string.IsNullOrEmpty(username))
            {
                Console.WriteLine("用户名不可为空");
                continue;
            }
            
            if (!IsValidUsername(username))
            {
                Console.WriteLine("用户名无效！长度必须为3-15个字符，且只能包含字母、数字和下划线");
                continue;
            }
            
            if (IsUsernameExists(username))
            {
                Console.WriteLine("用户名已存在，请选择其他用户名");
                continue;
            }
            
            break;
        }
        
        // 获取并验证密码
        string password;
        while (true)
        {
            Console.Write("请输入密码：");
            password = Console.ReadLine()?.Trim();
            
            if (string.IsNullOrEmpty(password))
            {
                Console.WriteLine("密码不可为空");
                continue;
            }
            
            if (!IsValidPassword(password))
            {
                Console.WriteLine("密码无效！长度必须为6-20个字符，且必须包含至少1个大写字母、1个小写字母和1个数字");
                continue;
            }
            
            break;
        }
        
        // 确认密码
        while (true)
        {
            Console.Write("请确认密码：");
            string confirmPassword = Console.ReadLine()?.Trim();
            
            if (string.IsNullOrEmpty(confirmPassword))
            {
                Console.WriteLine("确认密码不可为空");
                continue;
            }
            
            if (password != confirmPassword)
            {
                Console.WriteLine("两次输入的密码不一致，请重新输入");
                continue;
            }
            
            break;
        }
        
        // 创建新用户并添加到列表
        registeredUsers.Add(new User { Username = username, Password = password });
        Console.WriteLine("注册成功！");
    }
    
    // 用户登录功能
    public static void Login()
    {
        Console.WriteLine("\n===== 用户登录 =====");
        
        Console.Write("请输入用户名：");
        string username = Console.ReadLine()?.Trim();
        
        if (string.IsNullOrEmpty(username))
        {
            Console.WriteLine("用户名不可为空");
            return;
        }
        
        Console.Write("请输入密码：");
        string password = Console.ReadLine()?.Trim();
        
        if (string.IsNullOrEmpty(password))
        {
            Console.WriteLine("密码不可为空");
            return;
        }
        
        // 查找用户
        User user = registeredUsers.Find(u => u.Username == username);
        
        if (user == null)
        {
            Console.WriteLine("登录失败：用户名不存在");
            return;
        }
        
        if (user.Password != password)
        {
            Console.WriteLine("登录失败：密码错误");
            return;
        }
        
        // 登录成功，进入系统首页
        Console.WriteLine("登录成功！欢迎使用系统");
        Console.WriteLine("===== 系统首页 =====");
        Console.WriteLine("(模拟系统首页，按任意键返回主菜单)");
        Console.ReadKey();
    }
    
    // 验证用户名是否符合规则
    private static bool IsValidUsername(string username)
    {
        // 长度必须为3-15个字符，只能包含字母、数字、下划线
        if (username.Length < 3 || username.Length > 15)
            return false;
            
        return Regex.IsMatch(username, @"^[a-zA-Z0-9_]+$");
    }
    
    // 验证密码是否符合规则
    private static bool IsValidPassword(string password)
    {
        // 长度必须为6-20个字符
        if (password.Length < 6 || password.Length > 20)
            return false;
            
        // 必须包含至少1个大写字母、1个小写字母和1个数字
        bool hasUpper = Regex.IsMatch(password, @"[A-Z]");
        bool hasLower = Regex.IsMatch(password, @"[a-z]");
        bool hasDigit = Regex.IsMatch(password, @"[0-9]");
        
        return hasUpper && hasLower && hasDigit;
    }
    
    // 检查用户名是否已存在
    private static bool IsUsernameExists(string username)
    {
        return registeredUsers.Exists(u => u.Username == username);
    }
}    